Logo de Sermanitas

SERMANITAS

Servo Memory Controller con potenciómetro

📄 Descargar PDF del proyecto

En este proyecto vas a controlar un servo con un potenciómetro, pero con un extra muy especial: podrás guardar varias posiciones usando un botón y luego reproducirlas automáticamente con otro. Es como crear una pequeña animación mecánica programable, perfecta para aprender a usar servos, botones, EEPROM y lógica con Arduino.

Material necesario

Esquema de conexión

Esquema Servo Memory Controller

Potenciómetro → Pin A0 (terminal central)
Servo → Pin 9 (señal), 5V y GND
Botón guardar → Pin 2 (con INPUT_PULLUP)
Botón automático → Pin 3 (con INPUT_PULLUP)
LED indicador → Pin 4 + resistencia 220 Ω → GND

Código Arduino


#include <Servo.h>
#include <EEPROM.h>

Servo servo;
int potPin = A0;
int botonGuardar = 2;
int botonAuto = 3;
int ledIndicador = 4;

int posiciones[5];
int totalGuardadas = 0;

void setup() {
  servo.attach(9);
  pinMode(botonGuardar, INPUT_PULLUP);
  pinMode(botonAuto, INPUT_PULLUP);
  pinMode(ledIndicador, OUTPUT);

  // Leer posiciones guardadas en EEPROM
  totalGuardadas = EEPROM.read(0);
  if (totalGuardadas > 5) totalGuardadas = 5;

  for (int i = 0; i < totalGuardadas; i++) {
    posiciones[i] = EEPROM.read(i + 1);
  }
}

void loop() {
  // Modo manual: potenciómetro controla el servo
  int potValue = analogRead(potPin);
  int angulo = map(potValue, 0, 1023, 0, 180);
  servo.write(angulo);

  // Guardar posición (botón guardar pulsado)
  if (digitalRead(botonGuardar) == LOW && totalGuardadas < 5) {
    posiciones[totalGuardadas] = angulo;
    EEPROM.write(totalGuardadas + 1, angulo);
    totalGuardadas++;
    EEPROM.write(0, totalGuardadas);

    // Indicar guardado con el LED
    digitalWrite(ledIndicador, HIGH);
    delay(200);
    digitalWrite(ledIndicador, LOW);
    delay(200);
  }

  // Reproducir posiciones (botón auto pulsado)
  if (digitalRead(botonAuto) == LOW && totalGuardadas > 0) {
    // Mientras el botón siga pulsado, repetir el ciclo
    while (digitalRead(botonAuto) == LOW) {
      for (int i = 0; i < totalGuardadas; i++) {
        servo.write(posiciones[i]);
        delay(500);
      }
    }
  }
}
      

Paso a paso

1. Conecta el potenciómetro

Conecta los extremos del potenciómetro a 5V y GND, y la patilla central al pin A0 del Arduino. Girándolo, cambiarás el ángulo del servo en modo manual.

2. Conecta el servo

Cable de señal al pin 9, rojo a 5V y negro/marrón a GND. Asegúrate de no alimentar servos grandes directamente desde el 5V del Arduino.

3. Conecta los botones y el LED

Botón de guardar al pin 2 y botón de automático al pin 3, ambos configurados con INPUT_PULLUP. El LED indicador al pin 4 con una resistencia de 220 Ω hacia GND.

4. Carga el código

Abre el IDE de Arduino, selecciona tu placa y puerto, pega el código y súbelo.

5. Prueba el modo memoria

Mueve el potenciómetro a una posición y pulsa el botón de guardar. Repite hasta tener varias posiciones. Luego pulsa el botón automático y verás cómo el servo recorre todas las posiciones guardadas en secuencia.

⚡ Consejo Sermanitas: este proyecto es una base perfecta para un brazo robótico, una compuerta automática o una animación mecánica programable. Solo es cuestión de añadir más servos… y creatividad.